﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>FileSelectFolder</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>FileSelectFolder</h1>

<p>显示允许用户选择文件夹的标准对话框。</p>

<p class="CommandSyntax">FileSelectFolder, OutputVar [, StartingFolder, Options, Prompt]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr> 
    <td width="15%">OutputVar</td>
    <td width="85%"><p>用来保存用户所选择的文件夹的变量名。如果用户取消了对话框，则该变量将被置为空（比如不想选择文件夹）。若用户选择了根目录（如 C:\），<em>OutputVar</em> 会以反斜杠结尾。如果不需要这个反斜杠，可用下面的方法去掉它：</p>
    <pre>FileSelectFolder, Folder
Folder := RegExReplace(Folder, "\\$")  <em>; 若以反斜杠结尾，则去掉它。</em></pre></td>
  </tr>
  <tr> 
    <td>StartingFolder</td>
    <td><p>若为空或省略，对话框选择的起始目录为用户的我的文档文件夹（或者可能是我的电脑）。  <a href="../misc/CLSID-List.htm">CLSID 文件夹</a>，比如 <em>::{20d04fe0-3aea-1069-a2d8-08002b30309d}</em> （也就是我的电脑）可以作为特殊文件被指定为起始目录。</p>
      <p>另外，该参数最常见的用法是一个星号通配符后紧跟着作为起始位置的驱动器或文件夹的绝对路径。比如 <em>*C:\ </em>将把C盘作为起始选择位置。与此类似，<em>*C:\My Folder</em> 将把该文件夹作为起始选择位置。</p>
      <p>星号表示允许用户从起始目录向上导航（接近根目录）。如果没有星号，用户只能选择 <em>StartingFolder</em> 中的文件夹（或者 <em>StartingFolder</em> 本身）。省略星号的一个好处是用户不必点击目录前的加号，<em>StartingFolder</em> 一开始即以树状目录形式显示出来。</p>
      <p>若存在星呈，向上导航可被限制到除桌面外的某个文件夹。在星号前加上最上级文件夹的绝对路径和一个空格或制表符，即可达到此目的。 在下面的例子中，不允许用户导航到高于 C:\My Folder 的目录（但起始目录为 C:\My Folder\Projects）：<br>
      <em>C:\My Folder *C:\My Folder\Projects</em></p>
    </td>
  </tr>
  <tr> 
    <td>Options</td>
    <td><p>以下数字之一：</p>
      <p><strong>0</strong>: 以下所有选项无效（Windows 2000 除外，它可能始终显示“新建文件夹”按钮）。</p>
      <p><strong>1</strong> （默认）：提供允许用户新建文件夹的按钮。然而，该按钮在 Windows 95/98/NT 中不会出现。</p>
      <p>上述数字<strong>加 2</strong> 提供允许用户输入文件夹名的编辑框。比如该参数为数值 3，则同时提供一个编辑框和一个“新建文件夹”按钮。</p>
      <p>上述数字<strong><a name="NewDialog"></a>加 4</strong> 可以忽略 BIF_NEWDIALOGSTYLE 属性。加4确保了 FileSelectFolder 可以在诸如 WinPE 或者 BartPE 之类的预安装环境中也能正常工作。然而，这可能会妨碍 &quot;新建文件夹&quot; 按钮的出现，至少在 Windows XP 中是这样。[&quot;4&quot; 需要 1.0.48+ 版本]</p>
      <p>如果用户在编辑框中输入非法文件夹名， <em>OutputVar</em> 将会被置为在导航树中选择的文件夹名，而不是用户输入的名称，至少在 Windows XP 中是这样。</p>
      <p>该参数可以是个<a href="../Variables.htm#Expressions">表达式</a>。<br>
    </p></td>
  </tr>
  <tr>
    <td>Prompt</td>
    <td>显示在窗口中，告诉用户该做什么的文字。如果省略或空白，则默认为“选择文件夹 - %A_SCRIPTNAME%&quot;（也就是当前脚本的名称）。</td>
  </tr>
</table>

<h3>ErrorLevel</h3>
<p>如果用户关闭对话框而未选择文件，则 <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 被置为 1 （比如按了取消按钮）。如果系统拒绝显示对话框（罕见），该变量也会被置为 1。否则其值为 0。</p>
<h3>注意</h3>
<p> 在 GUI 窗口中，可以用   <A href="Gui.htm#OwnDialogs">Gui +OwnDialogs</A> 来显示一个选择文件夹的模式对话框。在模式对话框关闭之前，禁止用户与 GUI 窗口进行交互操作。</p>
<p>已知的限制：在显示 FileSelectFolder 对话框时启动的<a href="SetTimer.htm">定时器</a>，将会使用户在对话框中的点击延迟生效，直到该定时器程序执行完毕。为避免这一问题，应避免使用子程序耗时很长的定时器，或者在显示对话框时禁止所有的定时器：</p>
<pre><a href="Thread.htm">Thread</a>, NoTimers
FileSelectFolder, OutputVar,, 3
Thread, NoTimers, false</pre>
<h3>相关命令</h3>
<p><a href="FileSelectFile.htm">FileSelectFile</a>, <a href="MsgBox.htm">MsgBox</a>, <a href="InputBox.htm">InputBox</a>, <a href="ToolTip.htm">ToolTip</a>, <a href="Gui.htm">GUI</a>, <a href="../misc/CLSID-List.htm">CLSID List</a>, <a href="FileCopyDir.htm">FileCopyDir</a>, <a href="FileMoveDir.htm">FileMoveDir</a>, <a href="SplitPath.htm">SplitPath</a></p>
<p>操作系统还提供提示用户选择字体、颜色或图标的标准对话框。这些对话框可以通过 <a href="DllCall.htm">DllCall()</a> 来显示，示例见 <a href="http://www.autohotkey.com/forum/topic17230.html">www.autohotkey.com/forum/topic17230.html</a>。</p>
<h3>示例</h3>
<pre class="NoIndent">FileSelectFolder, OutputVar, , 3
if OutputVar =
    MsgBox, 您未选择文件夹。
else
    MsgBox, 您选择了文件夹 “%OutputVar%”。

<a href="../misc/CLSID-List.htm">CLSID</a> 示例：
FileSelectFolder, OutputVar, ::{20d04fe0-3aea-1069-a2d8-08002b30309d}  <em>; 我的电脑。</em></pre>


</body>
</html>
